package com.demo.java.OD1_50.OD43;

import java.util.Scanner;
import java.util.TreeSet;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最小步骤数】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145579074
 */
public class OdMain {
    static int[] nums = null;  // 存储输入的数组
    static int stepResult = 0; // 最小步数

    // 递归计算最小步数
    private static int in(int curIndex, int lastIndex) {
        int numStep = nums[curIndex];
        if (lastIndex == nums.length - 1) {  // 如果已经到达终点
            return stepResult;
        } else if (lastIndex < nums.length - 1) {
            ++stepResult;
            return in(lastIndex, lastIndex + numStep);  // 跳到下一个位置
        } else {
            return -1;  // 如果无法到达终点
        }
    }

    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            String inputStr = s.nextLine();  // 读取输入
            String[] strs = inputStr.split(" ");  // 将输入分割为数组
            nums = new int[strs.length];
            for (int i = 0; i < strs.length; ++i) {
                nums[i] = Integer.parseInt(strs[i]);  // 转换为整数
            }
            int len = nums.length;  // 获取数组长度

            TreeSet<Integer> set = new TreeSet<>();  // 用于存储最小步数

            for (int i = 1; i < len / 2; ++i) {  // 遍历数组的每个可能的起始点
                stepResult = 1;  // 初始步数为 1
                set.add(in(i, i));  // 调用递归计算最小步数
            }

            // 如果无法跳到终点，返回 -1
            if (1 != set.size()) {
                set.pollFirst();
            }
            System.out.println(set.first());  // 输出最小步数
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}